// stdx/arrayx.rs
// CRITICAL: Array 相关示例。展示固定长度数组、切片与转换。
// AUTO_COMMENT: 该文件为学习用途，示例尽量简短、安全。

#[allow(dead_code)]
pub fn stdx_examples_arrayx() {
    // CRITICAL: 固定长度数组创建与索引
    let a: [i32; 4] = [1, 2, 3, 4];
    let first: i32 = a[0];

    // CRITICAL: 切片 (&[T]) 与切片方法
    let slice: &[i32] = &a[1..3];
    let sum: i32 = slice.iter().copied().sum();

    // CRITICAL: 数组与 Vec 的互转
    let vec_from_array: Vec<i32> = a.to_vec();
    let _ = (first, slice, sum, vec_from_array);

    // CRITICAL: 数组的长度和迭代
    let len = a.len();
    let mut sum_all = 0;
    for &item in &a {
        sum_all += item;
    }

    // CRITICAL: 数组的 map 和 collect
    let doubled: [i32; 4] = a.map(|x| x * 2);

    // CRITICAL: 数组的 zip 和迭代
    let b: [i32; 4] = [5, 6, 7, 8];
    let zipped: [(i32, i32); 4] = a.zip(b).collect::<Vec<_>>().try_into().unwrap();

    // CRITICAL: 数组的排序（需要可变）
    let mut c = [3, 1, 4, 1];
    c.sort();

    // CRITICAL: 数组的二分查找
    let index = a.binary_search(&2);

    // CRITICAL: 数组的重复值创建
    let repeated: [i32; 5] = [42; 5];

    // CRITICAL: 数组的 as_slice 和 as_mut_slice
    let slice_ref = a.as_slice();
    let mut d = [1, 2, 3];
    let mut_slice = d.as_mut_slice();
    mut_slice[0] = 10;

    let _ = (
        len, sum_all, doubled, zipped, c, index, repeated, slice_ref, d,
    );
}
